package metier;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DB.Request;
import bean.MessageEntete;

public class MessageEnteteMetier {

	private static MessageEnteteMetier singleton = new MessageEnteteMetier();
	
	public static MessageEnteteMetier getInstance(){
		return singleton;
	}
	
	public MessageEntete save(MessageEntete messageEntete){
		
		if(messageEntete != null){
			String query;
			if (messageEntete.getId_message_entete() != null) {
				//UPDATE
				query = "UPDATE message_entete SET date_message=?,heure=?,type_expediteur=?,type_destinataire=?,titre=?,lu=?,destinataire=?,expediteur=? WHERE id_message_entete="+messageEntete.getId_message_entete();
			} else {
				//INSERT
				query = "INSERT INTO message_entete(date_message,heure,type_expediteur,type_destinataire,titre,lu,destinataire,expediteur) VALUES (?,?,?,?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(messageEntete.getDate_message());
			param.add(messageEntete.getHeure());
			param.add(messageEntete.getType_expediteur());
			param.add(messageEntete.getType_destinataire());
			param.add(messageEntete.getTitre());
			param.add(messageEntete.isLu());
			param.add(messageEntete.getDestinataire().getId_utilisateur());
			param.add(messageEntete.getExpediteur().getId_utilisateur());
			Request.getInstance().executeUpdate(query, param);
		}
		
		if (messageEntete.getId_message_entete() != null) {
			return getById(messageEntete.getId_message_entete());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(MessageEntete messageEntete){
		String query = "DELETE FROM message_entete WHERE id_message_entete =" + messageEntete.getId_message_entete();
		Request.getInstance().executeUpdate(query);
	}
	
	public MessageEntete getById(Integer id){
		MessageEntete message_entete = null;
		String query = "SELECT * FROM message_entete WHERE id_message_entete=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				message_entete = new MessageEntete(id, resultat.getDate("date_message"), resultat.getTime("heure"), resultat.getString("type_expediteur"), resultat.getString("type_destinataire"), resultat.getString("titre"), resultat.getBoolean("lu"), UtilisateurMetier.getInstance().getById(resultat.getInt("destinataire")), UtilisateurMetier.getInstance().getById(resultat.getInt("expediteur")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return message_entete;
	}
	
	public List<MessageEntete> getAll(){
		List<MessageEntete> messagesEntete = new ArrayList<MessageEntete>();
		String query = "SELECT * FROM message_entete WHERE id_message_entete";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				MessageEntete messageEntete = new MessageEntete(resultat.getInt("id_message_entete"), resultat.getDate("date_message"), resultat.getTime("heure"), resultat.getString("type_expediteur"), resultat.getString("type_destinataire"), resultat.getString("titre"), resultat.getBoolean("lu"), UtilisateurMetier.getInstance().getById(resultat.getInt("destinataire")), UtilisateurMetier.getInstance().getById(resultat.getInt("expediteur")));
				messagesEntete.add(messageEntete);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return messagesEntete;
	}
	
	public List<MessageEntete> getByIdUtilisateur(Integer id_utilisateur){
		List<MessageEntete> messagesEntete = new ArrayList<MessageEntete>();
		String query = "SELECT * FROM message_entete WHERE destinataire="+id_utilisateur;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				MessageEntete messageEntete = new MessageEntete(resultat.getInt("id_message_entete"), resultat.getDate("date_message"), resultat.getTime("heure"), resultat.getString("type_expediteur"), resultat.getString("type_destinataire"), resultat.getString("titre"), resultat.getBoolean("lu"), UtilisateurMetier.getInstance().getById(resultat.getInt("destinataire")), UtilisateurMetier.getInstance().getById(resultat.getInt("expediteur")));
				messagesEntete.add(messageEntete);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return messagesEntete;
	}
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_message_entete) AS id_message_entete FROM message_entete";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_message_entete");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
}
